﻿#Region "Microsoft.VisualBasic::a569a13cc7b75b8c8e7719f420966908, Google.Protobuf\WellKnownTypes\Duration.vb"

    ' Author:
    ' 
    '       asuka (amethyst.asuka@gcmodeller.org)
    '       xie (genetics@smrucc.org)
    '       xieguigang (xie.guigang@live.com)
    ' 
    ' Copyright (c) 2018 GPL3 Licensed
    ' 
    ' 
    ' GNU GENERAL PUBLIC LICENSE (GPL3)
    ' 
    ' 
    ' This program is free software: you can redistribute it and/or modify
    ' it under the terms of the GNU General Public License as published by
    ' the Free Software Foundation, either version 3 of the License, or
    ' (at your option) any later version.
    ' 
    ' This program is distributed in the hope that it will be useful,
    ' but WITHOUT ANY WARRANTY; without even the implied warranty of
    ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    ' GNU General Public License for more details.
    ' 
    ' You should have received a copy of the GNU General Public License
    ' along with this program. If not, see <http://www.gnu.org/licenses/>.



    ' /********************************************************************************/

    ' Summaries:

    '     Module DurationReflection
    ' 
    '         Properties: Descriptor
    ' 
    '         Constructor: (+1 Overloads) Sub New
    ' 
    '     Class Duration
    ' 
    '         Properties: Descriptor, DescriptorProp, Nanos, Parser, Seconds
    ' 
    '         Constructor: (+2 Overloads) Sub New
    ' 
    '         Function: CalculateSize, Clone, (+2 Overloads) Equals, GetHashCode, ToString
    ' 
    '         Sub: (+2 Overloads) MergeFrom, OnConstruction, WriteTo
    ' 
    ' 
    ' /********************************************************************************/

#End Region

' Generated by the protocol buffer compiler.  DO NOT EDIT!
' source: google/protobuf/duration.proto
#Region "Designer generated code"

Imports Microsoft.VisualBasic.Language
Imports pbr = Google.Protobuf.Reflection

Namespace Google.Protobuf.WellKnownTypes

    ''' <summary>Holder for reflection information generated from google/protobuf/duration.proto</summary>
    Public Partial Module DurationReflection

#Region "Descriptor"
        ''' <summary>File descriptor for google/protobuf/duration.proto</summary>
        Public ReadOnly Property Descriptor As pbr.FileDescriptor
            Get
                Return descriptorField
            End Get
        End Property

        Private descriptorField As pbr.FileDescriptor

        Sub New()
            Dim descriptorData As Byte() = Global.System.Convert.FromBase64String(String.Concat("Ch5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8SD2dvb2dsZS5wcm90", "b2J1ZiIqCghEdXJhdGlvbhIPCgdzZWNvbmRzGAEgASgDEg0KBW5hbm9zGAIg", "ASgFQnwKE2NvbS5nb29nbGUucHJvdG9idWZCDUR1cmF0aW9uUHJvdG9QAVoq", "Z2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHR5cGVzL2R1cmF0aW9uoAEB", "ogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90", "bzM="))
            descriptorField = pbr.FileDescriptor.FromGeneratedCode(descriptorData, New pbr.FileDescriptor() {}, New pbr.GeneratedClrTypeInfo(Nothing, New pbr.GeneratedClrTypeInfo() {New pbr.GeneratedClrTypeInfo(GetType(Global.Google.Protobuf.WellKnownTypes.Duration), Global.Google.Protobuf.WellKnownTypes.Duration.Parser, {"Seconds", "Nanos"}, Nothing, Nothing, Nothing)}))
        End Sub
#End Region

    End Module
#Region "Messages"
    ''' <summary>
    '''  A Duration represents a signed, fixed-length span of time represented
    '''  as a count of seconds and fractions of seconds at nanosecond
    '''  resolution. It is independent of any calendar and concepts like "day"
    '''  or "month". It is related to Timestamp in that the difference between
    '''  two Timestamp values is a Duration and it can be added or subtracted
    '''  from a Timestamp. Range is approximately +-10,000 years.
    '''
    '''  Example 1: Compute Duration from two Timestamps in pseudo code.
    '''
    '''      Timestamp start = ...;
    '''      Timestamp end = ...;
    '''      Duration duration = ...;
    '''
    '''      duration.seconds = end.seconds - start.seconds;
    '''      duration.nanos = end.nanos - start.nanos;
    '''
    '''      if (duration.seconds &lt; 0 &amp;&amp; duration.nanos > 0) {
    '''        duration.seconds += 1;
    '''        duration.nanos -= 1000000000;
    '''      } else if (durations.seconds > 0 &amp;&amp; duration.nanos &lt; 0) {
    '''        duration.seconds -= 1;
    '''        duration.nanos += 1000000000;
    '''      }
    '''
    '''  Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
    '''
    '''      Timestamp start = ...;
    '''      Duration duration = ...;
    '''      Timestamp end = ...;
    '''
    '''      end.seconds = start.seconds + duration.seconds;
    '''      end.nanos = start.nanos + duration.nanos;
    '''
    '''      if (end.nanos &lt; 0) {
    '''        end.seconds -= 1;
    '''        end.nanos += 1000000000;
    '''      } else if (end.nanos >= 1000000000) {
    '''        end.seconds += 1;
    '''        end.nanos -= 1000000000;
    '''      }
    ''' </summary>
    Public NotInheritable Partial Class Duration
        Implements IMessageType(Of Duration)

        Private Shared ReadOnly _parser As MessageParserType(Of Duration) = New MessageParserType(Of Duration)(Function() New Duration())

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Shared ReadOnly Property Parser As MessageParserType(Of Duration)
            Get
                Return _parser
            End Get
        End Property

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Shared ReadOnly Property DescriptorProp As pbr.MessageDescriptor
            Get
                Return Global.Google.Protobuf.WellKnownTypes.DurationReflection.Descriptor.MessageTypes(0)
            End Get
        End Property

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Private ReadOnly Property Descriptor As pbr.MessageDescriptor Implements IMessage.Descriptor
            Get
                Return DescriptorProp
            End Get
        End Property

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Sub New()
            OnConstruction()
        End Sub

        Partial Private Sub OnConstruction()
        End Sub

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Sub New(other As Duration)
            Me.New()
            seconds_ = other.seconds_
            nanos_ = other.nanos_
        End Sub

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Function Clone() As Duration Implements IDeepCloneable(Of Duration).Clone
            Return New Duration(Me)
        End Function

        ''' <summary>Field number for the "seconds" field.</summary>
        Public Const SecondsFieldNumber As Integer = 1
        Private seconds_ As Long
        ''' <summary>
        '''  Signed seconds of the span of time. Must be from -315,576,000,000
        '''  to +315,576,000,000 inclusive.
        ''' </summary>
        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Property Seconds As Long
            Get
                Return seconds_
            End Get
            Set(value As Long)
                seconds_ = value
            End Set
        End Property

        ''' <summary>Field number for the "nanos" field.</summary>
        Public Const NanosFieldNumber As Integer = 2
        Private nanos_ As Integer
        ''' <summary>
        '''  Signed fractions of a second at nanosecond resolution of the span
        '''  of time. Durations less than one second are represented with a 0
        '''  `seconds` field and a positive or negative `nanos` field. For durations
        '''  of one second or more, a non-zero value for the `nanos` field must be
        '''  of the same sign as the `seconds` field. Must be from -999,999,999
        '''  to +999,999,999 inclusive.
        ''' </summary>
        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Property Nanos As Integer
            Get
                Return nanos_
            End Get
            Set(value As Integer)
                nanos_ = value
            End Set
        End Property

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Overrides Function Equals(other As Object) As Boolean
            Return Equals(TryCast(other, Duration))
        End Function

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Overloads Function Equals(other As Duration) As Boolean Implements IEquatable(Of Duration).Equals
            If ReferenceEquals(other, Nothing) Then
                Return False
            End If

            If ReferenceEquals(other, Me) Then
                Return True
            End If

            If Seconds <> other.Seconds Then Return False
            If Nanos <> other.Nanos Then Return False
            Return True
        End Function

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Overrides Function GetHashCode() As Integer
            Dim hash = 1
            If Seconds <> 0L Then hash = hash Xor Seconds.GetHashCode()
            If Nanos <> 0 Then hash = hash Xor Nanos.GetHashCode()
            Return hash
        End Function

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Overrides Function ToString() As String
            Return JsonFormatter.ToDiagnosticString(Me)
        End Function

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Sub WriteTo(output As CodedOutputStream) Implements IMessage.WriteTo
            If Seconds <> 0L Then
                output.WriteRawTag(8)
                output.WriteInt64(Seconds)
            End If

            If Nanos <> 0 Then
                output.WriteRawTag(16)
                output.WriteInt32(Nanos)
            End If
        End Sub

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Function CalculateSize() As Integer Implements IMessage.CalculateSize
            Dim size = 0

            If Seconds <> 0L Then
                size += 1 + CodedOutputStream.ComputeInt64Size(Seconds)
            End If

            If Nanos <> 0 Then
                size += 1 + CodedOutputStream.ComputeInt32Size(Nanos)
            End If

            Return size
        End Function

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Sub MergeFrom(other As Duration) Implements IMessageType(Of Duration).MergeFrom
            If other Is Nothing Then
                Return
            End If

            If other.Seconds <> 0L Then
                Seconds = other.Seconds
            End If

            If other.Nanos <> 0 Then
                Nanos = other.Nanos
            End If
        End Sub

        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute>
        Public Sub MergeFrom(input As CodedInputStream) Implements IMessage.MergeFrom
            Dim tag As New Value(Of UInteger)

            While ((tag = input.ReadTag())) <> 0

                Select Case tag.Value
                    Case 8
                        Seconds = input.ReadInt64()

                    Case 16
                        Nanos = input.ReadInt32()

                    Case Else
                        input.SkipLastField()
                End Select
            End While
        End Sub
    End Class

#End Region

End Namespace
#End Region
